随着公司的发展,业务不断的增加,模块的不断拆分,系统间业务调用就变得越复杂,对定位线上故障带来很大困难。整个调用链不透明,犹如系统被蒙上一块黑纱,当线上遇到故障时,整个技术部就陷入痛苦的漩涡。这时候分布式追踪系统应运而生,如揭开了黑纱,让阳光照进黑暗。
opentracing是一套分布式追踪协议,与平台,语言无关,统一接口,方便开发接入不同的分布式追踪系统。
一个完整的opentracing调用链包含 Trace + span + 无限极分类
Jaeger是Uber开发的一套分布式追踪系统,已在Uber大规模使用。并在2017-9-13 加入CNCF 开源组织。使用Jaeger可以非常直观的展示整个分布式系统的调用链,由此可以很好发现和解决问题:
接口 | Thrift/byte | json/byte | 节省 |
---|---|---|---|
接口1 | 987 | 2396 | 约1.5倍 |
接口2 | 1212 | 2916 | 约1.4倍 |
接口3 | 12830 | 18893 | 约40% |
接口4 | 17158 | 22465 | 约24% |
接口5 | 11025 | 14282 | 约23% |
从中可以看出thrift相对json减少了不少空间。在我们采集公司接口的数据大小都集中在10~20k,所以使用thrift会更有优势。
Jaeger 官方提供了多种采集策略,使用者可以按需选择使用
官方提供了 go,java,node,python客户端,其他客户端还在开放中,php客户端为个人开发【欢迎start】
all-in-one 是Uber官方打包好的镜像,可以直接部署使用,但是只能用于测试环境,不能用于线上,因为它把数据放入了内存。
docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp \
-p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one:latest
通过 http://localhost:16686 可以在浏览器查看 Jaeger的后台
go get github.com/uber/jaeger
cd $GOPATH/src/github.com/uber/jaeger
make install_examples
cd examples/hotrod
go run ./main.go all
http://localhost:8080 浏览器打开查看
docker run -itd
--name=cassandra -p9042:9042
-v /data/cassandra:/var/lib/cassandra
cassandra
按照官方脚本整理了一份建表语句jaeger_tables,进入cassandra,执行语句即可创建所需的表。
keyspaces:jaeger_v1_dc
docker run -itd --network=bridge
--name=jaeger-query
-p16686:16686
jaegertracing/jaeger-query
/go/bin/query-linux
--span-storage.type=cassandra
--cassandra.keyspace=jaeger_v1_dc
--cassandra.servers={{ cassandra }}:9042
--query.static-files=/go/jaeger-ui/
docker run -itd --network=bridge
--name=jaeger-collector
-p14267:14267
-p14268:14268
-p9411:9411
jaegertracing/jaeger-collector
/go/bin/collector-linux
--span-storage.type=cassandra
--cassandra.keyspace=jaeger_v1_dc
--cassandra.servers={{ cassandra }}:9042
docker run
-itd --network=bridge
--name=jaeger-agent
-p5775:5775/udp
-p6831:6831/udp
-p6832:6832/udp
-p5778:5778/tcp
jaegertracing/jaeger-agent
/go/bin/agent-linux --collector.host-port={{ jaeger-collector }}:14267
go get github.com/astaxie/beego
git clone git@github.com:jukylin/trace_example.git
cd trace_example
bee run trace_example
Run Hprose.php
cd vendor/jukylin/jaeger-php/example
php Hprose.php